{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('fei02_max.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/10/10          2621.3316  10    10      283         41        3     4   \n",
      "1  2019/10/11          2669.0172  10    11      284         41        4     4   \n",
      "2  2019/10/12          2632.9704  10    12      285         41        5     4   \n",
      "3  2019/10/13          1810.2156  10    13      286         41        6     4   \n",
      "4  2019/10/14          2522.4576  10    14      287         42        0     4   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       0       0      0      0         0      2.0    32.0      25.0   \n",
      "1       0       0      0      0         0      1.0    33.0      25.0   \n",
      "2       0       0      0      0         1      2.0    33.0      24.0   \n",
      "3       0       0      0      0         1      9.0    31.0      23.0   \n",
      "4       0       0      0      0         0      2.0    29.0      23.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/10/10          2621.3316  10    10      283         41        3     4   \n",
      "1  2019/10/11          2669.0172  10    11      284         41        4     4   \n",
      "2  2019/10/12          2632.9704  10    12      285         41        5     4   \n",
      "3  2019/10/13          1810.2156  10    13      286         41        6     4   \n",
      "4  2019/10/14          2522.4576  10    14      287         42        0     4   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       0       0      0      0         0      2.0    32.0      25.0   \n",
      "1       0       0      0      0         0      1.0    33.0      25.0   \n",
      "2       0       0      0      0         1      2.0    33.0      24.0   \n",
      "3       0       0      0      0         1      9.0    31.0      23.0   \n",
      "4       0       0      0      0         0      2.0    29.0      23.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  是否季节末  \\\n",
      "0      2621.3316  10  10    283     41        3   4     0     0      0      0   \n",
      "1      2669.0172  10  11    284     41        4   4     0     0      0      0   \n",
      "2      2632.9704  10  12    285     41        5   4     0     0      0      0   \n",
      "3      1810.2156  10  13    286     41        6   4     0     0      0      0   \n",
      "4      2522.4576  10  14    287     42        0   4     0     0      0      0   \n",
      "..           ...  ..  ..    ...    ...      ...  ..   ...   ...    ...    ...   \n",
      "778          NaN  11  26    330     47        4   4     0     0      0      0   \n",
      "779          NaN  11  27    331     47        5   4     0     0      0      0   \n",
      "780          NaN  11  28    332     47        6   4     0     0      0      0   \n",
      "781          NaN  11  29    333     48        0   4     0     0      0      0   \n",
      "782          NaN  11  30    334     48        1   4     0     1      0      0   \n",
      "\n",
      "     是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0       0  2.00  32.00  25.00   11.00    8.00  \n",
      "1       0  1.00  33.00  25.00   11.00    8.00  \n",
      "2       1  2.00  33.00  24.00   11.00    8.00  \n",
      "3       1  9.00  31.00  23.00   11.00    8.00  \n",
      "4       0  2.00  29.00  23.00   11.00    8.00  \n",
      "..    ...   ...    ...    ...     ...     ...  \n",
      "778     0  2.00  25.80  16.35   15.20   12.20  \n",
      "779     1  2.00  23.65  15.30   19.40   16.40  \n",
      "780     1  1.15  21.40  13.50   21.15   18.15  \n",
      "781     0  1.85  22.05  13.65   15.20   12.20  \n",
      "782     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[783 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of      var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1     0.488266   0.818182   0.300000   0.772603   0.769231   0.500000   \n",
      "2     0.500543   0.818182   0.333333   0.775342   0.769231   0.666667   \n",
      "3     0.491263   0.818182   0.366667   0.778082   0.769231   0.833333   \n",
      "4     0.279437   0.818182   0.400000   0.780822   0.769231   1.000000   \n",
      "5     0.462810   0.818182   0.433333   0.783562   0.788462   0.000000   \n",
      "..         ...        ...        ...        ...        ...        ...   \n",
      "687   0.685596   0.636364   0.833333   0.649315   0.634615   0.500000   \n",
      "688   0.639233   0.636364   0.866667   0.652055   0.634615   0.666667   \n",
      "689   0.435961   0.636364   0.900000   0.654795   0.634615   0.833333   \n",
      "690   0.453448   0.636364   0.933333   0.657534   0.634615   1.000000   \n",
      "691   0.667164   0.636364   0.966667   0.660274   0.653846   0.000000   \n",
      "\n",
      "     var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "2     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "3     1.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "4     1.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "5     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "..         ...        ...        ...         ...         ...         ...   \n",
      "687   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "688   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "689   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "690   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "691   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "     var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1         0.125    0.785714    0.846154       0.000       0.000  0.500543  \n",
      "2         0.000    0.821429    0.846154       0.000       0.000  0.491263  \n",
      "3         0.125    0.821429    0.807692       0.000       0.000  0.279437  \n",
      "4         1.000    0.750000    0.769231       0.000       0.000  0.462810  \n",
      "5         0.125    0.678572    0.769231       0.000       0.000  0.469266  \n",
      "..          ...         ...         ...         ...         ...       ...  \n",
      "687       1.000    0.892857    0.923077       0.875       0.875  0.639233  \n",
      "688       1.000    0.892857    0.884615       0.875       0.875  0.435961  \n",
      "689       0.125    0.821429    0.884615       0.875       0.875  0.453448  \n",
      "690       1.000    0.785714    0.846154       0.875       0.875  0.667164  \n",
      "691       1.000    0.857143    0.884615       0.875       0.875  0.643349  \n",
      "\n",
      "[691 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(600, 1, 17) (600,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "9/9 - 1s - loss: 0.2905 - val_loss: 0.3007 - 1s/epoch - 133ms/step\n",
      "Epoch 2/100\n",
      "9/9 - 0s - loss: 0.1775 - val_loss: 0.1477 - 26ms/epoch - 3ms/step\n",
      "Epoch 3/100\n",
      "9/9 - 0s - loss: 0.1520 - val_loss: 0.1024 - 23ms/epoch - 3ms/step\n",
      "Epoch 4/100\n",
      "9/9 - 0s - loss: 0.1553 - val_loss: 0.0958 - 23ms/epoch - 3ms/step\n",
      "Epoch 5/100\n",
      "9/9 - 0s - loss: 0.1503 - val_loss: 0.0979 - 26ms/epoch - 3ms/step\n",
      "Epoch 6/100\n",
      "9/9 - 0s - loss: 0.1419 - val_loss: 0.1030 - 23ms/epoch - 3ms/step\n",
      "Epoch 7/100\n",
      "9/9 - 0s - loss: 0.1355 - val_loss: 0.1025 - 28ms/epoch - 3ms/step\n",
      "Epoch 8/100\n",
      "9/9 - 0s - loss: 0.1301 - val_loss: 0.0967 - 24ms/epoch - 3ms/step\n",
      "Epoch 9/100\n",
      "9/9 - 0s - loss: 0.1255 - val_loss: 0.0930 - 25ms/epoch - 3ms/step\n",
      "Epoch 10/100\n",
      "9/9 - 0s - loss: 0.1215 - val_loss: 0.0918 - 23ms/epoch - 3ms/step\n",
      "Epoch 11/100\n",
      "9/9 - 0s - loss: 0.1176 - val_loss: 0.0918 - 24ms/epoch - 3ms/step\n",
      "Epoch 12/100\n",
      "9/9 - 0s - loss: 0.1139 - val_loss: 0.0920 - 25ms/epoch - 3ms/step\n",
      "Epoch 13/100\n",
      "9/9 - 0s - loss: 0.1108 - val_loss: 0.0927 - 24ms/epoch - 3ms/step\n",
      "Epoch 14/100\n",
      "9/9 - 0s - loss: 0.1082 - val_loss: 0.0936 - 24ms/epoch - 3ms/step\n",
      "Epoch 15/100\n",
      "9/9 - 0s - loss: 0.1059 - val_loss: 0.0946 - 24ms/epoch - 3ms/step\n",
      "Epoch 16/100\n",
      "9/9 - 0s - loss: 0.1037 - val_loss: 0.0956 - 24ms/epoch - 3ms/step\n",
      "Epoch 17/100\n",
      "9/9 - 0s - loss: 0.1018 - val_loss: 0.0965 - 24ms/epoch - 3ms/step\n",
      "Epoch 18/100\n",
      "9/9 - 0s - loss: 0.0998 - val_loss: 0.0979 - 25ms/epoch - 3ms/step\n",
      "Epoch 19/100\n",
      "9/9 - 0s - loss: 0.0982 - val_loss: 0.0984 - 25ms/epoch - 3ms/step\n",
      "Epoch 20/100\n",
      "9/9 - 0s - loss: 0.0964 - val_loss: 0.0985 - 22ms/epoch - 2ms/step\n",
      "Epoch 21/100\n",
      "9/9 - 0s - loss: 0.0949 - val_loss: 0.0981 - 24ms/epoch - 3ms/step\n",
      "Epoch 22/100\n",
      "9/9 - 0s - loss: 0.0932 - val_loss: 0.0983 - 26ms/epoch - 3ms/step\n",
      "Epoch 23/100\n",
      "9/9 - 0s - loss: 0.0918 - val_loss: 0.0979 - 25ms/epoch - 3ms/step\n",
      "Epoch 24/100\n",
      "9/9 - 0s - loss: 0.0901 - val_loss: 0.0984 - 28ms/epoch - 3ms/step\n",
      "Epoch 25/100\n",
      "9/9 - 0s - loss: 0.0890 - val_loss: 0.0981 - 26ms/epoch - 3ms/step\n",
      "Epoch 26/100\n",
      "9/9 - 0s - loss: 0.0873 - val_loss: 0.0989 - 26ms/epoch - 3ms/step\n",
      "Epoch 27/100\n",
      "9/9 - 0s - loss: 0.0862 - val_loss: 0.0996 - 25ms/epoch - 3ms/step\n",
      "Epoch 28/100\n",
      "9/9 - 0s - loss: 0.0850 - val_loss: 0.0993 - 24ms/epoch - 3ms/step\n",
      "Epoch 29/100\n",
      "9/9 - 0s - loss: 0.0841 - val_loss: 0.0993 - 27ms/epoch - 3ms/step\n",
      "Epoch 30/100\n",
      "9/9 - 0s - loss: 0.0829 - val_loss: 0.1012 - 26ms/epoch - 3ms/step\n",
      "Epoch 31/100\n",
      "9/9 - 0s - loss: 0.0819 - val_loss: 0.1010 - 25ms/epoch - 3ms/step\n",
      "Epoch 32/100\n",
      "9/9 - 0s - loss: 0.0812 - val_loss: 0.1024 - 24ms/epoch - 3ms/step\n",
      "Epoch 33/100\n",
      "9/9 - 0s - loss: 0.0801 - val_loss: 0.1033 - 24ms/epoch - 3ms/step\n",
      "Epoch 34/100\n",
      "9/9 - 0s - loss: 0.0795 - val_loss: 0.1027 - 23ms/epoch - 3ms/step\n",
      "Epoch 35/100\n",
      "9/9 - 0s - loss: 0.0787 - val_loss: 0.1032 - 23ms/epoch - 3ms/step\n",
      "Epoch 36/100\n",
      "9/9 - 0s - loss: 0.0782 - val_loss: 0.1029 - 24ms/epoch - 3ms/step\n",
      "Epoch 37/100\n",
      "9/9 - 0s - loss: 0.0773 - val_loss: 0.1036 - 24ms/epoch - 3ms/step\n",
      "Epoch 38/100\n",
      "9/9 - 0s - loss: 0.0769 - val_loss: 0.1030 - 24ms/epoch - 3ms/step\n",
      "Epoch 39/100\n",
      "9/9 - 0s - loss: 0.0763 - val_loss: 0.1035 - 25ms/epoch - 3ms/step\n",
      "Epoch 40/100\n",
      "9/9 - 0s - loss: 0.0757 - val_loss: 0.1054 - 25ms/epoch - 3ms/step\n",
      "Epoch 41/100\n",
      "9/9 - 0s - loss: 0.0752 - val_loss: 0.1050 - 26ms/epoch - 3ms/step\n",
      "Epoch 42/100\n",
      "9/9 - 0s - loss: 0.0748 - val_loss: 0.1044 - 26ms/epoch - 3ms/step\n",
      "Epoch 43/100\n",
      "9/9 - 0s - loss: 0.0744 - val_loss: 0.1045 - 27ms/epoch - 3ms/step\n",
      "Epoch 44/100\n",
      "9/9 - 0s - loss: 0.0739 - val_loss: 0.1031 - 24ms/epoch - 3ms/step\n",
      "Epoch 45/100\n",
      "9/9 - 0s - loss: 0.0735 - val_loss: 0.1034 - 23ms/epoch - 3ms/step\n",
      "Epoch 46/100\n",
      "9/9 - 0s - loss: 0.0730 - val_loss: 0.1005 - 23ms/epoch - 3ms/step\n",
      "Epoch 47/100\n",
      "9/9 - 0s - loss: 0.0728 - val_loss: 0.1021 - 25ms/epoch - 3ms/step\n",
      "Epoch 48/100\n",
      "9/9 - 0s - loss: 0.0722 - val_loss: 0.0996 - 25ms/epoch - 3ms/step\n",
      "Epoch 49/100\n",
      "9/9 - 0s - loss: 0.0722 - val_loss: 0.1010 - 28ms/epoch - 3ms/step\n",
      "Epoch 50/100\n",
      "9/9 - 0s - loss: 0.0715 - val_loss: 0.0972 - 24ms/epoch - 3ms/step\n",
      "Epoch 51/100\n",
      "9/9 - 0s - loss: 0.0717 - val_loss: 0.0970 - 24ms/epoch - 3ms/step\n",
      "Epoch 52/100\n",
      "9/9 - 0s - loss: 0.0709 - val_loss: 0.0963 - 23ms/epoch - 3ms/step\n",
      "Epoch 53/100\n",
      "9/9 - 0s - loss: 0.0708 - val_loss: 0.0965 - 24ms/epoch - 3ms/step\n",
      "Epoch 54/100\n",
      "9/9 - 0s - loss: 0.0704 - val_loss: 0.0953 - 25ms/epoch - 3ms/step\n",
      "Epoch 55/100\n",
      "9/9 - 0s - loss: 0.0701 - val_loss: 0.0954 - 25ms/epoch - 3ms/step\n",
      "Epoch 56/100\n",
      "9/9 - 0s - loss: 0.0698 - val_loss: 0.0926 - 24ms/epoch - 3ms/step\n",
      "Epoch 57/100\n",
      "9/9 - 0s - loss: 0.0697 - val_loss: 0.0937 - 24ms/epoch - 3ms/step\n",
      "Epoch 58/100\n",
      "9/9 - 0s - loss: 0.0693 - val_loss: 0.0892 - 23ms/epoch - 3ms/step\n",
      "Epoch 59/100\n",
      "9/9 - 0s - loss: 0.0693 - val_loss: 0.0937 - 24ms/epoch - 3ms/step\n",
      "Epoch 60/100\n",
      "9/9 - 0s - loss: 0.0689 - val_loss: 0.0879 - 23ms/epoch - 3ms/step\n",
      "Epoch 61/100\n",
      "9/9 - 0s - loss: 0.0685 - val_loss: 0.0926 - 22ms/epoch - 2ms/step\n",
      "Epoch 62/100\n",
      "9/9 - 0s - loss: 0.0685 - val_loss: 0.0887 - 22ms/epoch - 2ms/step\n",
      "Epoch 63/100\n",
      "9/9 - 0s - loss: 0.0680 - val_loss: 0.0872 - 23ms/epoch - 3ms/step\n",
      "Epoch 64/100\n",
      "9/9 - 0s - loss: 0.0679 - val_loss: 0.0882 - 25ms/epoch - 3ms/step\n",
      "Epoch 65/100\n",
      "9/9 - 0s - loss: 0.0677 - val_loss: 0.0878 - 25ms/epoch - 3ms/step\n",
      "Epoch 66/100\n",
      "9/9 - 0s - loss: 0.0675 - val_loss: 0.0858 - 23ms/epoch - 3ms/step\n",
      "Epoch 67/100\n",
      "9/9 - 0s - loss: 0.0672 - val_loss: 0.0866 - 24ms/epoch - 3ms/step\n",
      "Epoch 68/100\n",
      "9/9 - 0s - loss: 0.0673 - val_loss: 0.0876 - 25ms/epoch - 3ms/step\n",
      "Epoch 69/100\n",
      "9/9 - 0s - loss: 0.0670 - val_loss: 0.0848 - 23ms/epoch - 3ms/step\n",
      "Epoch 70/100\n",
      "9/9 - 0s - loss: 0.0666 - val_loss: 0.0844 - 22ms/epoch - 2ms/step\n",
      "Epoch 71/100\n",
      "9/9 - 0s - loss: 0.0668 - val_loss: 0.0881 - 25ms/epoch - 3ms/step\n",
      "Epoch 72/100\n",
      "9/9 - 0s - loss: 0.0668 - val_loss: 0.0828 - 22ms/epoch - 2ms/step\n",
      "Epoch 73/100\n",
      "9/9 - 0s - loss: 0.0662 - val_loss: 0.0859 - 24ms/epoch - 3ms/step\n",
      "Epoch 74/100\n",
      "9/9 - 0s - loss: 0.0662 - val_loss: 0.0860 - 23ms/epoch - 3ms/step\n",
      "Epoch 75/100\n",
      "9/9 - 0s - loss: 0.0659 - val_loss: 0.0819 - 24ms/epoch - 3ms/step\n",
      "Epoch 76/100\n",
      "9/9 - 0s - loss: 0.0660 - val_loss: 0.0857 - 23ms/epoch - 3ms/step\n",
      "Epoch 77/100\n",
      "9/9 - 0s - loss: 0.0657 - val_loss: 0.0813 - 24ms/epoch - 3ms/step\n",
      "Epoch 78/100\n",
      "9/9 - 0s - loss: 0.0658 - val_loss: 0.0859 - 23ms/epoch - 3ms/step\n",
      "Epoch 79/100\n",
      "9/9 - 0s - loss: 0.0655 - val_loss: 0.0824 - 26ms/epoch - 3ms/step\n",
      "Epoch 80/100\n",
      "9/9 - 0s - loss: 0.0652 - val_loss: 0.0812 - 23ms/epoch - 3ms/step\n",
      "Epoch 81/100\n",
      "9/9 - 0s - loss: 0.0656 - val_loss: 0.0854 - 24ms/epoch - 3ms/step\n",
      "Epoch 82/100\n",
      "9/9 - 0s - loss: 0.0653 - val_loss: 0.0787 - 23ms/epoch - 3ms/step\n",
      "Epoch 83/100\n",
      "9/9 - 0s - loss: 0.0650 - val_loss: 0.0830 - 22ms/epoch - 2ms/step\n",
      "Epoch 84/100\n",
      "9/9 - 0s - loss: 0.0650 - val_loss: 0.0812 - 26ms/epoch - 3ms/step\n",
      "Epoch 85/100\n",
      "9/9 - 0s - loss: 0.0648 - val_loss: 0.0804 - 26ms/epoch - 3ms/step\n",
      "Epoch 86/100\n",
      "9/9 - 0s - loss: 0.0649 - val_loss: 0.0815 - 25ms/epoch - 3ms/step\n",
      "Epoch 87/100\n",
      "9/9 - 0s - loss: 0.0646 - val_loss: 0.0785 - 25ms/epoch - 3ms/step\n",
      "Epoch 88/100\n",
      "9/9 - 0s - loss: 0.0646 - val_loss: 0.0807 - 25ms/epoch - 3ms/step\n",
      "Epoch 89/100\n",
      "9/9 - 0s - loss: 0.0645 - val_loss: 0.0794 - 24ms/epoch - 3ms/step\n",
      "Epoch 90/100\n",
      "9/9 - 0s - loss: 0.0645 - val_loss: 0.0809 - 27ms/epoch - 3ms/step\n",
      "Epoch 91/100\n",
      "9/9 - 0s - loss: 0.0644 - val_loss: 0.0774 - 29ms/epoch - 3ms/step\n",
      "Epoch 92/100\n",
      "9/9 - 0s - loss: 0.0644 - val_loss: 0.0804 - 27ms/epoch - 3ms/step\n",
      "Epoch 93/100\n",
      "9/9 - 0s - loss: 0.0643 - val_loss: 0.0795 - 26ms/epoch - 3ms/step\n",
      "Epoch 94/100\n",
      "9/9 - 0s - loss: 0.0642 - val_loss: 0.0765 - 24ms/epoch - 3ms/step\n",
      "Epoch 95/100\n",
      "9/9 - 0s - loss: 0.0639 - val_loss: 0.0793 - 24ms/epoch - 3ms/step\n",
      "Epoch 96/100\n",
      "9/9 - 0s - loss: 0.0640 - val_loss: 0.0789 - 25ms/epoch - 3ms/step\n",
      "Epoch 97/100\n",
      "9/9 - 0s - loss: 0.0640 - val_loss: 0.0795 - 23ms/epoch - 3ms/step\n",
      "Epoch 98/100\n",
      "9/9 - 0s - loss: 0.0639 - val_loss: 0.0766 - 22ms/epoch - 2ms/step\n",
      "Epoch 99/100\n",
      "9/9 - 0s - loss: 0.0637 - val_loss: 0.0767 - 22ms/epoch - 2ms/step\n",
      "Epoch 100/100\n",
      "9/9 - 0s - loss: 0.0641 - val_loss: 0.0805 - 23ms/epoch - 3ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.628331</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.413699</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.602249</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.416438</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.750</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.646013</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.419178</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.558196</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.421918</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.410057</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.424658</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.679776</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.649315</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.923077</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.617164</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.652055</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.527130</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.654795</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.821429</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.529271</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.657534</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.846154</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.716631</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.660274</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.628331  0.454545  0.000000  0.413699  0.403846  0.166667  0.333333  1.0   \n",
       "1   0.602249  0.454545  0.033333  0.416438  0.403846  0.333333  0.333333  0.0   \n",
       "2   0.646013  0.454545  0.066667  0.419178  0.403846  0.500000  0.333333  0.0   \n",
       "3   0.558196  0.454545  0.100000  0.421918  0.403846  0.666667  0.333333  0.0   \n",
       "4   0.410057  0.454545  0.133333  0.424658  0.403846  0.833333  0.333333  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.679776  0.636364  0.833333  0.649315  0.634615  0.500000  0.666667  0.0   \n",
       "87  0.617164  0.636364  0.866667  0.652055  0.634615  0.666667  0.666667  0.0   \n",
       "88  0.527130  0.636364  0.900000  0.654795  0.634615  0.833333  0.666667  0.0   \n",
       "89  0.529271  0.636364  0.933333  0.657534  0.634615  1.000000  0.666667  0.0   \n",
       "90  0.716631  0.636364  0.966667  0.660274  0.653846  0.000000  0.666667  0.0   \n",
       "\n",
       "     8    9    10   11     12        13        14     15     16  \n",
       "0   0.0  0.0  0.0  0.0  0.625  0.785714  0.884615  0.875  0.875  \n",
       "1   0.0  0.0  0.0  0.0  0.750  0.750000  0.884615  0.875  0.875  \n",
       "2   0.0  0.0  0.0  0.0  0.625  0.892857  0.807692  0.875  0.875  \n",
       "3   0.0  0.0  0.0  0.0  0.500  0.642857  0.769231  0.875  0.875  \n",
       "4   0.0  0.0  0.0  1.0  0.125  0.785714  0.807692  0.875  0.875  \n",
       "..  ...  ...  ...  ...    ...       ...       ...    ...    ...  \n",
       "86  0.0  0.0  0.0  0.0  1.000  0.892857  0.923077  0.875  0.875  \n",
       "87  0.0  0.0  0.0  0.0  1.000  0.892857  0.884615  0.875  0.875  \n",
       "88  0.0  0.0  0.0  1.0  0.125  0.821429  0.884615  0.875  0.875  \n",
       "89  0.0  0.0  0.0  1.0  1.000  0.785714  0.846154  0.875  0.875  \n",
       "90  0.0  0.0  0.0  0.0  1.000  0.857143  0.884615  0.875  0.875  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 398.122\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3058.767 , 3378.2148, 3056.7192, 1987.8998, 2208.2927, 3264.985 ,\n",
       "       3381.0576, 3487.275 , 3435.0713, 3384.3228, 2450.01  , 2243.5698,\n",
       "       2263.8083, 3395.592 , 3459.171 , 3491.2495, 3550.0073, 2785.4287,\n",
       "       2568.6594, 3543.7805, 3060.4375, 3030.9912, 3019.9253, 3125.5703,\n",
       "       2711.7996, 2543.823 , 3525.5027, 3412.975 , 3418.4358, 3525.0847,\n",
       "       3414.8833, 2684.3633, 2384.652 , 3537.368 , 3535.4717, 3590.4653,\n",
       "       3411.6797, 3268.4465, 2724.8706, 2410.6267, 3446.9321, 3211.09  ,\n",
       "       3287.1643, 3362.649 , 3299.5723, 2573.7683, 2435.1533, 3202.2234,\n",
       "       2992.4058, 3010.677 , 3093.2214, 3136.7058, 2698.9717, 2470.0735,\n",
       "       3437.8057, 3403.74  , 3383.85  , 3374.145 , 3174.804 , 2677.5498,\n",
       "       2428.833 , 2982.0955, 3133.0488, 3082.2073, 3003.123 , 3070.5173,\n",
       "       2526.8003, 2343.5808, 3124.701 , 2854.7075, 2835.381 , 3092.5867,\n",
       "       3010.4856, 2475.9534, 2210.9268, 3037.3127, 3135.368 , 3217.6968,\n",
       "       3173.2944, 3208.2834, 2531.592 , 2321.0215, 3200.8015, 3293.208 ,\n",
       "       3285.6265, 3387.783 , 3207.7014, 2418.1716, 2486.0945, 3316.1904,\n",
       "       3223.692 ], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3165.3599, 3064.0547, 3234.037 , 2892.948 , 2317.5583, 2432.5603,\n",
       "       3344.45  , 3456.1028, 3382.6648, 3408.6416, 3168.2578, 2664.0989,\n",
       "       2546.0266, 2656.4963, 3529.997 , 3514.5552, 3472.8938, 3434.4128,\n",
       "       3033.263 , 2826.4565, 3645.7375, 3177.0583, 3086.4326, 3018.6414,\n",
       "       3008.5598, 2943.1084, 2791.1355, 3679.197 , 3513.0317, 3278.0688,\n",
       "       3467.1992, 3276.656 , 2850.639 , 2601.0637, 3682.8367, 3497.4841,\n",
       "       3491.1843, 3356.2156, 3205.2224, 2937.8145, 2648.3018, 3612.7249,\n",
       "       3379.096 , 3372.4202, 3346.879 , 3152.712 , 2841.7012, 2674.0608,\n",
       "       3368.8384, 3088.4836, 3082.5977, 3129.64  , 3110.4746, 2951.458 ,\n",
       "       2756.5432, 3644.6616, 3568.9685, 3422.0369, 3325.434 , 3079.6501,\n",
       "       2715.3633, 2596.6646, 3166.365 , 3220.5132, 3136.7778, 2982.9285,\n",
       "       2999.6467, 2791.3098, 2639.94  , 3305.7278, 3005.072 , 2966.0027,\n",
       "       3081.5452, 2938.6934, 2789.0312, 2533.009 , 3275.3396, 3335.5762,\n",
       "       3338.5674, 3183.731 , 3171.0735, 2857.9424, 2664.2544, 3477.4607,\n",
       "       3484.4944, 3372.8523, 3365.1765, 3121.9841, 2772.2822, 2780.5989,\n",
       "       3508.3254], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.1104844\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: 0.042929155568009025\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x104d7b51760>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('fei02_max_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
